﻿Imports CapaDatos.DataSetTruequeTableAdapters
Imports CapaDatos.DataSetTrueque
Imports Entidades
Public Class DatosDesconectado
    Dim ds As DataSetTrueque
    Public Sub CrearDataSet()
        ds = New DataSetTrueque
        Dim daTipoCliente As TipoClienteTableAdapter
        Dim daObjeto As ObjetoTableAdapter
        Dim daCliente As ClienteTableAdapter
        Dim daEntrega As EntregaTableAdapter
        Dim daFamilia As FamiliaTableAdapter
        Dim daUsuario As UsuarioTableAdapter
        Dim daAdministrador As AdministradorTableAdapter
        daTipoCliente = New TipoClienteTableAdapter
        daObjeto = New ObjetoTableAdapter
        daCliente = New ClienteTableAdapter
        daEntrega = New EntregaTableAdapter
        daFamilia = New FamiliaTableAdapter
        daUsuario = New UsuarioTableAdapter
        daAdministrador = New AdministradorTableAdapter
        daAdministrador.Fill(ds.Administrador)
        daTipoCliente.Fill(ds.TipoCliente)
        daObjeto.Fill(ds.Objeto)
        daCliente.Fill(ds.Cliente)
        daEntrega.Fill(ds.Entrega)
        daFamilia.Fill(ds.Familia)
        daUsuario.Fill(ds.Usuario)
    End Sub

    Public Function obtenerAdministrador() As Administrador
        Dim filas As DataRowCollection = ds.Administrador.Rows
        Dim admin As Administrador
        For Each drAdmin As DataSetTrueque.AdministradorRow In filas
            admin = New Administrador(drAdmin.Usuario, drAdmin.Contraseña)
            Return admin
        Next
        Return Nothing
    End Function

    Public Function numeroEntregas() As Integer
        Dim filas As DataRowCollection = ds.Entrega.Rows
        Dim numero As Integer
        numero = filas.Count
        Return numero

    End Function

    Public Function entregasPorValorar() As List(Of Entrega)
        Dim filas As DataRowCollection = ds.Entrega.Rows
        Dim lista As New List(Of Entrega)
        For Each drEntregas As DataSetTrueque.EntregaRow In filas
            If (drEntregas.Valorada = False) Then
                lista.Add(New Entrega(drEntregas.IdEntrega, drEntregas.IdCliente, drEntregas.NumProductos, drEntregas.IdUsuario))
            End If
        Next
        Return lista
    End Function

    Public Function detallesDeUnObjeto(ByVal codSerie As String) As Objeto
        Dim filas As DataRowCollection = ds.Objeto.Rows
        Dim objeto As Objeto
        Dim sino As Boolean = False
        For Each drObjetos As DataSetTrueque.ObjetoRow In filas
            If (drObjetos.NumeroSerie = codSerie) Then
                sino = True
                objeto = New Objeto(drObjetos.IdFamilia, drObjetos.NumeroFamilia, drObjetos.IdEntrega, drObjetos.Valoracion, drObjetos.Tamaño, drObjetos.NumeroSerie, drObjetos.Descripcion, drObjetos.DadoDeBaja)

            End If
        Next
        If sino = False Then
            Return Nothing
        Else
            Return objeto
        End If

    End Function

    Public Function obtenerTiposCliente() As List(Of TipoCliente)
        Dim filas As DataRowCollection = ds.TipoCliente.Rows
        Dim lista As New List(Of TipoCliente)
        For Each drTipoCliente As DataSetTrueque.TipoClienteRow In filas
            lista.Add(New TipoCliente(drTipoCliente.Id, drTipoCliente.Tipo))
        Next
        Return lista

    End Function
    Public Function objetosDeUnaEntrega(ByVal entrega As Entrega) As List(Of Objeto)
        Dim filas As DataRowCollection = ds.Objeto.Rows
        Dim lista As New List(Of Objeto)
        For Each drObjeto As DataSetTrueque.ObjetoRow In filas
            If drObjeto.IdEntrega = entrega.IdEntrega AndAlso drObjeto.DadoDeBaja = False Then
                lista.Add(New Objeto(drObjeto.IdFamilia, drObjeto.NumeroFamilia, drObjeto.IdEntrega, drObjeto.Valoracion, drObjeto.Tamaño, drObjeto.NumeroSerie, drObjeto.Descripcion))
            End If
        Next
        Return lista

    End Function
    Public Function objetosDeUnCliente(ByVal cli As Cliente) As List(Of Objeto)
        Dim filas As DataRowCollection = ds.Entrega.Rows
        Dim lista As New List(Of Objeto)
        Dim filas2() As DataSetTrueque.ObjetoRow

        For Each drEntrega As DataSetTrueque.EntregaRow In filas
            If drEntrega.IdCliente = cli.IdCliente Then
                filas2 = drEntrega.GetChildRows("EntregaObjeto")

                For Each drObjeto As DataSetTrueque.ObjetoRow In filas2
                    lista.Add(New Objeto(drObjeto.IdFamilia, drObjeto.NumeroFamilia, drObjeto.IdEntrega, drObjeto.Valoracion, drObjeto.Tamaño, drObjeto.NumeroSerie, drObjeto.Descripcion, drObjeto.DadoDeBaja))
                Next
            End If
        Next



        Return lista
    End Function
    Public Function obtenerFamilias() As List(Of Familia)
        Dim filas As DataRowCollection = ds.Familia.Rows
        Dim lista As New List(Of Familia)
        For Each drFamilia As DataSetTrueque.FamiliaRow In filas
            lista.Add(New Familia(drFamilia.IdFamilia, drFamilia.Nombre))
        Next
        Return lista

    End Function

    Public Function contarObjetosDeUnaFamilia(ByVal familia As Familia) As Integer
        Dim a As Integer = 0
        Dim filas As DataRowCollection = ds.Objeto.Rows
        For Each drObjeto As DataSetTrueque.ObjetoRow In filas
            If drObjeto.IdFamilia = familia.IdFamilia Then
                a = a + 1
            End If
        Next
        Return a
    End Function

    Public Function entregasPorCliente(ByVal cli As Cliente) As List(Of Entrega)
        Dim lista As New List(Of Entrega)
        Dim filas As DataRowCollection = ds.Entrega.Rows
        For Each drEntrega As DataSetTrueque.EntregaRow In filas
            If drEntrega.IdCliente = cli.IdCliente Then
                lista.Add(New Entrega(drEntrega.IdEntrega, drEntrega.IdCliente, drEntrega.NumProductos, drEntrega.IdUsuario))
            End If
        Next
        Return lista

    End Function

    Public Function clientesPorTipo(ByVal tipo As TipoCliente) As List(Of Cliente)
        Dim lista As New List(Of Cliente)
        Dim filas As DataRowCollection = ds.Cliente.Rows
        For Each drCliente As DataSetTrueque.ClienteRow In filas
            If drCliente.IdTipoCliente = tipo.id Then
                lista.Add(New Cliente(drCliente.IdCliente, drCliente.NombreApellidos, drCliente.Telefono, drCliente.Email, drCliente.IdTipoCliente))
            End If
        Next
        Return lista

    End Function

    Public Function objetosPorFamilia(ByVal fam As Familia) As List(Of Objeto)
        Dim lista As New List(Of Objeto)
        Dim filas As DataRowCollection = ds.Objeto.Rows
        For Each drObjeto As DataSetTrueque.ObjetoRow In filas
            If drObjeto.IdFamilia = fam.IdFamilia AndAlso drObjeto.DadoDeBaja = False Then
                lista.Add(New Objeto(drObjeto.IdFamilia, drObjeto.NumeroFamilia, drObjeto.IdEntrega, drObjeto.Valoracion, drObjeto.Tamaño, drObjeto.NumeroSerie, drObjeto.Descripcion))
            End If
        Next
        Return lista

    End Function

    Public Function clientePorObjeto(ByVal obj As Objeto) As Cliente
        Dim drEntregaCli As EntregaRow = ds.Entrega.FindByIdEntrega(obj.IdEntrega)
        Dim drCliente As ClienteRow = drEntregaCli.ClienteRow
        Dim cli As New Cliente(drCliente.IdCliente, drCliente.NombreApellidos, drCliente.Telefono, drCliente.Email, drCliente.IdTipoCliente)
        Return cli

    End Function

    Public Function clientePorEntrega(ByVal ent As Entrega) As Cliente
        Dim filas As DataRowCollection = ds.Cliente.Rows
        For Each drCliente As DataSetTrueque.ClienteRow In filas
            If drCliente.IdCliente = ent.IdCliente Then
                Dim cli As New Cliente(drCliente.IdCliente, drCliente.NombreApellidos, drCliente.Telefono, drCliente.Email, drCliente.IdTipoCliente)
                Return cli
            End If
        Next
        Return Nothing
    End Function

    Public Function obtenerUsuarios() As List(Of Usuario)
        Dim filas As DataRowCollection = ds.Usuario.Rows
        Dim lista As New List(Of Usuario)
        For Each drUsuario As DataSetTrueque.UsuarioRow In filas
            lista.Add(New Usuario(drUsuario.IdUsuario, drUsuario.Nombre))
        Next
        Return lista

    End Function

    Public Function clientePorNombre(ByVal nombre As String) As Cliente
        Dim fila As DataRowCollection = ds.Cliente.Rows
        Dim cliente As Cliente
        For Each drCliente As DataSetTrueque.ClienteRow In fila
            If drCliente.NombreApellidos.ToLower = nombre.ToLower Then
                cliente = New Cliente(drCliente.IdCliente, drCliente.NombreApellidos, drCliente.Telefono, drCliente.Email, drCliente.IdTipoCliente)
                Return cliente
            End If
        Next
        Return Nothing

    End Function
    Public Function clientePorTelefono(ByVal tel As String) As Cliente
        Dim fila As DataRowCollection = ds.Cliente.Rows
        Dim cliente As Cliente
        For Each drCliente As DataSetTrueque.ClienteRow In fila
            If drCliente.Telefono.ToLower = tel.ToLower Then
                cliente = New Cliente(drCliente.IdCliente, drCliente.NombreApellidos, drCliente.Telefono, drCliente.Email, drCliente.IdTipoCliente)
                Return cliente
            End If
        Next
        Return Nothing

    End Function

    Public Function clientePorEmail(ByVal em As String) As Cliente
        Dim fila As DataRowCollection = ds.Cliente.Rows
        Dim cliente As Cliente
        For Each drCliente As DataSetTrueque.ClienteRow In fila
            If drCliente.Email.ToLower = em.ToLower Then
                cliente = New Cliente(drCliente.IdCliente, drCliente.NombreApellidos, drCliente.Telefono, drCliente.Email, drCliente.IdTipoCliente)
                Return cliente
            End If
        Next
        Return Nothing

    End Function

End Class